今天是第28天,也是倒數第三天,今天要教大家簡單的幾個為WSL設定基本防禦環境的方法,這樣就可以避免自己的WSL在使用時看起來像在裸奔一樣。
我們那天雖然有建立防火牆,但是我們今天要更改成比那天更好的策略,我們今天要採用一種叫預設封鎖的策略,我們會先只允許SSH方便遠端管理以及HTTP/HTTPS提供的網站服務,剩下的會先封鎖,有需要的時候再慢慢放行,這樣做可以有效的減少攻擊面或防止誤開服務,同時,這樣做也符合最小權限原則,明確需要的服務。指令如下:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
最後再用sudo ufw status
檢查狀態,確保只有我們允許的埠開著。
我們在這步要安裝fail2ban,使用指令:
sudo apt install fail2ban -y
接著使用指令sudo fail2ban-client status
進行檢查是否運作
這個輸出表示目前只有一個監獄在運行,然後這個監獄專門用來保護SSH服務,如果有人連續輸入錯誤密碼,他會依照設定去阻擋IP。
如果想看到sshd jail的指令可以使用:
sudo fail2ban-client status sshd
輸出可以看到那些IP被封鎖以及jail的規則
例如我的:
注意!這邊是以ssh為例,如果想保護其他服務需要另外啟用
這邊以幾個常見的攻擊方式為例,在寫專案時就可寫入其中
from flask import Flask
app = Flask(__name__)
app.config.update(
SESSION_COOKIE_SECURE=True,
SESSION_COOKIE_HTTPONLY=True,
SESSION_COOKIE_SAMESITE='Lax',
)
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
from flask_wtf import CSRFProtect
csrf = CSRFProtect(app)
openssl s_client -connect your.site:443 -servername your.site
curl-I htts://example.com
今天我們學了如何建立基本的防禦環境,除了以上講的,定期檢查日誌也很重要,可以看到是否有異常流量等,明天要來統整我們目前為止學過的基礎通訊內容